package simple.string;

/**
 * @Desc <a href="https://leetcode.cn/problems/reverse-vowels-of-a-string/">345. 反转字符串中的元音字母</a>
 * 给你一个字符串 s ，仅反转字符串中的所有元音字母，并返回结果字符串。
 * 元音字母包括 'a'、'e'、'i'、'o'、'u'，且可能以大小写两种形式出现不止一次。
 * 示例 1：
 *   输入：s = "hello"
 *   输出："holle"
 * 示例 2：
 *   输入：s = "leetcode"
 *   输出："leotcede"
 * 提示：
 *   1 <= s.length <= 3 * 105
 *   s 由 可打印的 ASCII 字符组成
 * @Date 2023/2/7 12:17
 * @Created by 刘学松
 */
public class 反转字符串中的元音字母 {
    public String reverseVowels(String s) {
        boolean[] isVowel = new boolean[128];
        char[] charArr = {'a', 'e', 'i', 'o', 'u'};
        for (char c : charArr) {
            isVowel[c - ' '] = isVowel[Character.toUpperCase(c) - ' '] = true;
        }
        int length = s.length();
        char[] chars = s.toCharArray();
        int l = 0, r = length - 1;
        while (l < r) {
            while (l < length && !isVowel[chars[l]-' ']) {
                l++;
            }
            while (r > 0 && !isVowel[chars[r]-' ']) {
                r--;
            }
            if (l < r) {
                char temp = chars[l];
                chars[l++] = chars[r];
                chars[r--] = temp;
            }
        }
        return new String(chars);
    }
}
